草庐IT

Java Spring MVC 模板引擎

全部标签

c++ - 交换运算符的模板实现,合法吗?

我已经尝试为我的一个类实现交换加法运算符:structmytype{constexprmytype(othertypeconst&);constexprmytypeoperator+(othertypeconst&rhs)const;};templateconstexprautooperator+(Tconst&lhs,mytypeconst&rhs)->decltype(rhs+lhs){returnrhs+lhs;}想法是,只要右侧是mytype,右侧接受的任何内容在左侧也可以接受。这适用于icc和VisualStudio,并进入无限递归解析gcc和clang上的decltype(

c++ - MSVC 无法识别带有模板自动参数的 constexpr 函数

我试图为值列表中的值创建一个索引元查找器。这是代码:#include#includetemplatestructValueTplList;templateconstexprintMetaFindV(intind){//notfoundcasereturn-1;}templateconstexprintMetaFindV(intind=0){ifconstexpr(std::is_same_v){returnNeedleV==V?ind:MetaFindV(ind+1);}else{returnMetaFindV(ind+1);}}//maintemplatestructMetaInde

c++ - 如何使用 C++ 模板魔法来对类型进行模式匹配

我们的愿望是只为所有typenameT提供一个包装器,它支持结构化绑定(bind),例如通过tuple_size和tuple_element没有运行时开销(contexprs,SFINAE)。有一个函数encode接受Tobj作为参数,并使用更具体的参数和类型参数调用encode_impl。文章https://playfulprogramming.blogspot.com/2016/12/serializing-structs-with-c17-structured.html使用一堆arity函数来实现相同的结果。但据我所知,元组提供了可以使用的std::tuple_size。#inc

c++ - 未知的模板函数返回类型,使用 decltype 时代码重复

在我的工作中,有几个模板数学类(例如矩阵)。可以使用float或double(或其他数字类型,但就此而言,这并不重要)来实现一个对象。一个双重对象只能与另一个双重对象交互。为此,为各种类型实现了函数convert(),其实现类似于:Matrixconvert(constMatrix&m,T2dummy){//createamatrixwithtypeT2andcastmvaluesintoit//retMatrix(i,j)=(T2)m(i,j)}你会这样调用它:autofloatMatrix=convert(doubleMatrix,0.f);或者更详细一点:autofloatMat

c++ - 是否可以使指向不同模板类型的指针可转换?

我有一个模板类,它将一些信息与类型捆绑在一起:templateclassX{intdata[10];//doesn'tmatterwhat'sherereallyTt;public://alsonotterriblyrelevant};然后假设我们有一个基类和派生类:classBase{};classDerived:publicBase{};我希望能够做这样的事情(但我认为我做不到):voidf(shared_ptr>b);shared_ptr>d(newX);f(d);有没有办法让我指向X可转换为X的指针如果T*可转换为Y*? 最佳答案

c++ - 模板类+虚函数=必须实现?

这段代码:templatestructA{Tt;voidDoSomething(){t.SomeFunction();}};structB{};Aa;很容易编译,没有任何提示,只要我从不调用a.DoSomething().但是,如果我定义DoSomething作为虚函数,我会得到一个编译错误,指出B不声明SomeFunction.我多少能明白为什么会这样(DoSomething现在应该在vtable中有一个条目),但我不禁觉得它并不是真正的义务。而且它很烂。有什么办法可以克服这个问题吗?编辑2:好的。我希望这一次有意义:假设我正在进行侵入式引用计数,因此所有实体都必须从基类Object

c++ - 创建模板化对象时替代工厂模式 - C++

我想为一个CG项目实现一个Mesh类,但遇到了一些问题。我想要做的是一个Mesh类,它向用户隐藏实现细节(比如加载到特定API:OpenGL、DirectX、CUDA等)。此外,由于Mesh类将用于研究项目,因此该Mesh类必须非常灵活。classChannel{virtualloadToAPI()=0;}templateclassTypedChannel:publicChannel{std::vectordata;};templateclassOpenGLChannel:publicTypedChannel{loadToAPI();//implementation};classMes

c++ - GCC ICE——替代函数语法、可变参数模板和元组

(与C++0x,HowdoIexpandatupleintovariadictemplatefunctionarguments?相关。)以下代码(见下文)取自此discussion.目标是将函数应用于元组。我简化了模板参数并修改了代码以允许返回泛型类型的值。虽然原始代码编译正常,但当我尝试使用GCC4.4.3编译修改后的代码时,g++-std=c++0xmain.cc-omainGCC报告内部编译器错误(ICE),并显示以下消息:main.cc:Infunction‘intmain()’:main.cc:53:internalcompilererror:intsubst_copy,at

c++ - 定义中的模板函数

我有一些模板函数,我想在C++中使用define调用它:#defineCONFIG(key,type,def)getValue(key,def);当然不行。我可以做这样的东西吗? 最佳答案 它工作正常:templateTgetValue(int,int){returnT();}#defineCONFIG(key,type,def)getValue(key,def);intmain(){CONFIG(1,int,2);return0;} 关于c++-定义中的模板函数,我们在StackOve

c++ - CRTP 中的模板化派生类(奇怪的重复模板模式)

我使用的CRTP不能用g++4.2.1编译,也许是因为派生类本身就是一个模板?有谁知道为什么这不起作用,或者更好的是,如何让它起作用?示例代码和编译器错误如下。来源:foo.C#includeusingnamespacestd;templatestructfoo;templatestructbar:foo>{Xevaluate(){returnstatic_cast(5.3);}};templatestructbaz:foo>{Xevaluate(){returnstatic_cast("elk");}};templatestructfoo:D{Xoperator()(){return